// 给定一个包含非负整数的数组nums，其中nums[i] 表示第i条边的边长,要求统计数组中可以组成三角形三条边的三元组个数
// 思路，双指针法
// 构成三角形的条件为，任意两边之和大于第三边， 或者任意两边差小于第三边
// 数组先排序，定义两个指针，分别指向区间的两个端点，根据区间的两数之和和目标值比较，动态移动两个指针

function triangleNumber(nums) {
    // 1. 先对数组从小到大排序
    nums.sort((a, b) => a - b)
    let ans = 0
    for (let i = 2; i < nums.length; i++) {
        let left = 0
        let right = i - 1
        while (left < right) {
            if (nums[left] + nums[right] <= nums[i]) {
                left++
            } else {
                // left ——> right的都可以构成三角形
                ans += right - left
                right--
            }
        }
    }
    return ans
}
let arr = [4,2,3,4]
console.log(triangleNumber(arr))

